#ifndef IPROFILER_H
#define IPROFILER_H

#include <string>
using std::string;

//!Interface class for the profiler component.
class IProfiler
{
public:

	//!Destructor.
	virtual ~IProfiler(){};

	//!Initialise the component.
	virtual bool init(void)=0;

	//!Get the start time of the application.
	/*!
		The application time is used to calculate the percentage of execution. All percentage of execution depends on 
		the application time.
	*/
	virtual void startApplication(void)=0;

	//!Get the end time of application.
	virtual void endApplication(void)=0;

	//!Start to get execution data for a function.
	/*!
	\param name Name of the function. It doesn't need to be the exact name of the function. It is just a tag to represent 
	the function
	*/
	virtual void startCount(const string& name)=0;

	//!Stop to get execution data for a function.
	/*!
	\param name The name of the function to stop to get data from.
	*/
	virtual void endCount(const string& name)=0;

	//!Write the results.
	virtual void write(void)=0;

};

#endif

